<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <script>
        // 组合继承 = 原型链继承 + 借用构造函数继承 

        // 优点:
        //      能继承属性和方法 
        //      属性在自己身上  
        // 缺点:
        // 方法依然在原型上
        // 原型上多了一套属性  

        function Person(name, age) {
            this.name = name;
            this.age = age;
        }

        Person.prototype.sayHello = function () {
            console.log('hello world');
        }


        function Student(gender,...arg){
            this.gender = gender
            Person.call(this,...arg); 
        }

        // 上面还是借用构造函数继承  

        // 接下来是 用原型链继承 父类的方法  

        Student.prototype = new Person();

        const s = new Student('女','张三',20);
        console.log(s);
        console.log(s.name);
        console.log(s.age);
        s.sayHello()

        // 本来实例身上有一套属性(组合继承)  原型 上 也有一套 (原型链继承)





    </script>
</body>

</html>